
package com.crowdfunding.circle.trade.entity;

import java.math.BigDecimal;
import java.util.Date;

import org.apache.commons.lang3.StringUtils;

/**
 * 费用收支记录，包括\r\n拆解查看支付记录，\r\n拆解人收款记录，\r\n\r\n问题提问支付实体类
 *
 * @author 朱国军
 * @version 2016年07月10日 朱国军
 */
public class TradeRecordVO {
    
    /** 收支记录ID */
    private String tradeId;
    
    /** 问答或拆解ID */
    private String tradeTargetId;
    
    /** 问题描述 */
    private String questionDetail;
    
    /** 拆解项序号 */
    private Integer itemIndex;
    
    /** 项目名称 */
    private String projectName;
    
    /** 购买金额 */
    private BigDecimal buyAmount;
    
    /** 卖出人获取金额 */
    private BigDecimal saleAmount;
    
    /** 交易类型:1,拆解查看,2,问题提问,3,偷看 */
    private Integer tradeType;
    
    /** 交易时间 */
    private Date tradeTime;
    
    /** 付款用户：拆解查看人，提问人，偷看人 */
    private String buyUser;
    
    /** 收款用户：拆解人，回答人 */
    private String saleUser;
    
    /** 交易状态:1,购买用户付款；2,回答或拆解用户收款 */
    private Integer tradeState;
    
    /** 购买人昵称 */
    private String buyUserName;
    
    /** 卖出人昵称 */
    private String saleUserName;
    
    /** 发布人 */
    private String publishUser;
    
    /** 创建时间 */
    private Date createTime;
    
    /** 更新时间 */
    private Date updateTime;
    
    /** 状态：0默认，1管理员删除，2用户删除 */
    private Integer dataStatus;
    
    /**
     * 设置收支记录ID
     *
     * @param tradeId 收支记录ID
     */
    public void setTradeId(String tradeId) {
        this.tradeId = tradeId;
    }
    
    /**
     * 获取收支记录ID
     *
     * @return 收支记录ID
     */
    public String getTradeId() {
        return tradeId;
    }
    
    /**
     * 设置问答或拆解ID
     *
     * @param tradeTargetId 问答或拆解ID
     */
    public void setTradeTargetId(String tradeTargetId) {
        this.tradeTargetId = tradeTargetId;
    }
    
    /**
     * 获取问答或拆解ID
     *
     * @return 问答或拆解ID
     */
    public String getTradeTargetId() {
        return tradeTargetId;
    }
    
    /**
     * 设置问题描述
     *
     * @param questionDetail 问题描述
     */
    public void setQuestionDetail(String questionDetail) {
        this.questionDetail = questionDetail;
    }
    
    /**
     * 获取问题描述
     *
     * @return 问题描述
     */
    public String getQuestionDetail() {
        return questionDetail;
    }
    
    /**
     * 设置拆解项序号
     *
     * @param itemIndex 拆解项序号
     */
    public void setItemIndex(Integer itemIndex) {
        this.itemIndex = itemIndex;
    }
    
    /**
     * 获取拆解项序号
     *
     * @return 拆解项序号
     */
    public Integer getItemIndex() {
        return itemIndex;
    }
    
    /**
     * 设置项目名称
     *
     * @param projectName 项目名称
     */
    public void setProjectName(String projectName) {
        this.projectName = projectName;
    }
    
    /**
     * 获取项目名称
     *
     * @return 项目名称
     */
    public String getProjectName() {
        return projectName;
    }
    
    /**
     * 设置购买金额
     *
     * @param buyAmount 购买金额
     */
    public void setBuyAmount(BigDecimal buyAmount) {
        this.buyAmount = buyAmount;
    }
    
    /**
     * 获取购买金额
     *
     * @return 购买金额
     */
    public BigDecimal getBuyAmount() {
        return buyAmount;
    }
    
    /**
     * 设置卖出人获取金额
     *
     * @param saleAmount 卖出人获取金额
     */
    public void setSaleAmount(BigDecimal saleAmount) {
        this.saleAmount = saleAmount;
    }
    
    /**
     * 获取卖出人获取金额
     *
     * @return 卖出人获取金额
     */
    public BigDecimal getSaleAmount() {
        return saleAmount;
    }
    
    /**
     * 设置交易类型:1,拆解查看,2,问题提问,3,偷看
     *
     * @param tradeType 交易类型:1,拆解查看,2,问题提问,3,偷看
     */
    public void setTradeType(Integer tradeType) {
        this.tradeType = tradeType;
    }
    
    /**
     * 获取交易类型:1,拆解查看,2,问题提问,3,偷看
     *
     * @return 交易类型:1,拆解查看,2,问题提问,3,偷看
     */
    public Integer getTradeType() {
        return tradeType;
    }
    
    /**
     * 设置交易时间
     *
     * @param tradeTime 交易时间
     */
    public void setTradeTime(Date tradeTime) {
        this.tradeTime = tradeTime;
    }
    
    /**
     * 获取交易时间
     *
     * @return 交易时间
     */
    public Date getTradeTime() {
        return tradeTime;
    }
    
    /**
     * 设置付款用户：拆解查看人，提问人，偷看人
     *
     * @param buyUser 付款用户：拆解查看人，提问人，偷看人
     */
    public void setBuyUser(String buyUser) {
        this.buyUser = buyUser;
    }
    
    /**
     * 获取付款用户：拆解查看人，提问人，偷看人
     *
     * @return 付款用户：拆解查看人，提问人，偷看人
     */
    public String getBuyUser() {
        return buyUser;
    }
    
    /**
     * 设置收款用户：拆解人，回答人
     *
     * @param saleUser 收款用户：拆解人，回答人
     */
    public void setSaleUser(String saleUser) {
        this.saleUser = saleUser;
    }
    
    /**
     * 获取收款用户：拆解人，回答人
     *
     * @return 收款用户：拆解人，回答人
     */
    public String getSaleUser() {
        return saleUser;
    }
    
    /**
     * 设置交易状态:1,购买用户付款；2,回答或拆解用户收款
     *
     * @param tradeState 交易状态:1,购买用户付款；2,回答或拆解用户收款
     */
    public void setTradeState(Integer tradeState) {
        this.tradeState = tradeState;
    }
    
    /**
     * 获取交易状态:1,购买用户付款；2,回答或拆解用户收款
     *
     * @return 交易状态:1,购买用户付款；2,回答或拆解用户收款
     */
    public Integer getTradeState() {
        return tradeState;
    }
    
    /**
     * 设置购买人昵称
     *
     * @param buyUserName 购买人昵称
     */
    public void setBuyUserName(String buyUserName) {
        this.buyUserName = buyUserName;
    }
    
    /**
     * 获取购买人昵称
     *
     * @return 购买人昵称
     */
    public String getBuyUserName() {
        return buyUserName;
    }
    
    /**
     * 设置卖出人昵称
     *
     * @param saleUserName 卖出人昵称
     */
    public void setSaleUserName(String saleUserName) {
        this.saleUserName = saleUserName;
    }
    
    /**
     * 获取卖出人昵称
     *
     * @return 卖出人昵称
     */
    public String getSaleUserName() {
        return saleUserName;
    }
    
    /**
     * 设置发布人
     *
     * @param publishUser 发布人
     */
    public void setPublishUser(String publishUser) {
        this.publishUser = publishUser;
    }
    
    /**
     * 获取发布人
     *
     * @return 发布人
     */
    public String getPublishUser() {
        return publishUser;
    }
    
    /**
     * 设置创建时间
     *
     * @param createTime 创建时间
     */
    public void setCreateTime(Date createTime) {
        this.createTime = createTime;
    }
    
    /**
     * 获取创建时间
     *
     * @return 创建时间
     */
    public Date getCreateTime() {
        return createTime;
    }
    
    /**
     * 设置更新时间
     *
     * @param updateTime 更新时间
     */
    public void setUpdateTime(Date updateTime) {
        this.updateTime = updateTime;
    }
    
    /**
     * 获取更新时间
     *
     * @return 更新时间
     */
    public Date getUpdateTime() {
        return updateTime;
    }
    
    /**
     * 设置状态：0默认，1管理员删除，2用户删除
     *
     * @param dataStatus 状态：0默认，1管理员删除，2用户删除
     */
    public void setDataStatus(Integer dataStatus) {
        this.dataStatus = dataStatus;
    }
    
    /**
     * 获取状态：0默认，1管理员删除，2用户删除
     *
     * @return 状态：0默认，1管理员删除，2用户删除
     */
    public Integer getDataStatus() {
        return dataStatus;
    }
    
    /**
     * 检查字段长度是否超长，检查非空字段是否有值
     *
     * @return 检查提示信息，为null时表示检查通过
     */
    public String valid() {
        
        if (buyAmount == null) {
            return "购买金额不能为空";
        }
        
        if (tradeType == null) {
            return "交易类型:1,拆解查看,2,问题提问,3,偷看不能为空";
        }
        
        if (tradeTime == null) {
            return "交易时间不能为空";
        }
        
        if (tradeState == null) {
            return "交易状态:1,购买用户付款；2,回答或拆解用户收款不能为空";
        }
        
        if (StringUtils.isBlank(buyUserName)) {
            return "购买人昵称不能为空";
        }
        
        return null;
    }
}
